<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //. promise 指定回调函数相交以前更加灵活，
         //  因为以前是回调函数要在异步函数执行之前指定，
         //用Promise可以指定回调函数在异步执行之后再确定该怎么做
         // 比如请求数据，可能一秒就请求到了，但是可以在三秒后在展示数据，中间的两秒数据也不会消失


         // Promise 可以解决回调地狱问题，但还是存在回调函数
          // 回调函数； 回调函数嵌套调用，外部的回调函数异步执行的结果是内部回调函数的异步执行的条件 
          // 回调函数的例子
        doSomething(function(result){
            doSomethingElse(function(newResult){
                doThirdThing(function(failureResult){
                    console.log("get failureResult" + failureResult)
                },failureCallback)
            },failureCallback)
        },failureCallback)

        //使用Promise 链式调用解决地狱回调
      doSomething()
      .then(function(result){
          return doSomethingElse(result)
      })
      .then(function(newResult){
          return doThirdThing(newResult)
      })
      .then(function(failureResult){
         console.log("get failureResult" + failureResult)
      })
      .catch(failureCallback)


      // async / await 回调函数的最终解决方案
    async function request (){
        try{
            const result = await doSomething()
            const newResult = await doSomething(result)
            const failureResult = await doThirdThing(newResult)
            console.log("get failureResult" + failureResult)
        
        } catch(error){
            failureCallback(error)
        }
    }
    </script>
</body>
</html>